// Hidden
-.hidden { color: rgba(0,0,0,0);}
\ No newline at end of file
+.hidden { color: rgba(0,0,0,0);}
+
+// Caps-lock warning
+.caps-lock-warning-label {
+ padding-bottom: 8px;
+ padding-left: 6.2em;
+ @include fontsize($base_font_size - 1);
+ color: $warning_color;
+}
this.text = _('Caps lock is on.');
+ this.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
+ this.clutter_text.line_wrap = true;
+
this._keymap = Clutter.get_default_backend().get_keymap();
this.connect('notify::mapped', () => {
if (this.is_mapped()) {
this._stateChangedId = this._keymap.connect('state-changed',
- this._updateCapsLockWarningOpacity.bind(this));
+ () => this._sync(true));
} else {
this._keymap.disconnect(this._stateChangedId);
this._stateChangedId = 0;
}
- this._updateCapsLockWarningOpacity();
+ this._sync(false);
});
this.connect('destroy', () => {
- if (this._stateChangedId > 0)
+ if (this._stateChangedId)
this._keymap.disconnect(this._stateChangedId);
});
-
- this.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
- this.clutter_text.line_wrap = true;
}
- _updateCapsLockWarningOpacity() {
+ _sync(animate) {
let capsLockOn = this._keymap.get_caps_lock_state();
- this.opacity = capsLockOn ? 255 : 0;
+
+ this.remove_all_transitions();
+
+ this.natural_height_set = false;
+ let [, height] = this.get_preferred_height(-1);
+ this.natural_height_set = true;
+
+ this.ease({
+ height: capsLockOn ? height : 0,
+ opacity: capsLockOn ? 255 : 0,
+ duration: animate ? 200 : 0,
+ onComplete: () => {
+ if (capsLockOn)
+ this.height = -1;
+ },
+ });
}
});